package util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.primefaces.model.UploadedFile;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
/**
 *
 * @author bruno
 */
public class Ficheiro {

    /*
     * responde ao upload de um ficheiro escreve o ficheiro no caminho
     * especificado Retorna uma string com o caminho do ficheiro ou uma string
     * vazia em caso de erro
     */
    public static String carregar(UploadedFile file, String caminho) {
        return carregar(file, caminho, false);
    }

    public static String carregar(UploadedFile file, String caminho, boolean build) {
        InputStream is = null;
        boolean estado = false;
        String nomeFicheiro, aux = "", ext = "", outputfile, webPath = "";

        if (!build) {
            webPath = "../../web/";
        }


        //analisar s o ficheiro tem extensão
        if (file.getFileName().contains(".")) {
            ext = file.getFileName().substring(file.getFileName().lastIndexOf("."));
            nomeFicheiro = file.getFileName().substring(0, file.getFileName().lastIndexOf("."));
        } else {
            nomeFicheiro = file.getFileName();
        }

        //verificar se o ficheiro já existe
        while (new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath(webPath + caminho + "/" + nomeFicheiro + aux + ext)).isFile()) {
            aux = aux.isEmpty() ? Integer.toString(0) : Integer.toString(Integer.parseInt(aux) + 1);
        }
        outputfile = FacesContext.getCurrentInstance().getExternalContext().getRealPath(webPath + caminho + "/" + nomeFicheiro + aux + ext);

        try {
            is = file.getInputstream();
            FileOutputStream fos = new FileOutputStream(outputfile);
            // write bytes taken from uploaded file to target file
            int ch = is.read();
            while (ch != -1) {
                fos.write(ch);
                ch = is.read();
            }
            fos.close();
            estado = true;
        } catch (IOException ex) {
            ex.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null,
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao carregar o ficheiro " + file.getFileName(), null));
            outputfile = "";
        } finally {
            try {
                is.close();
            } catch (IOException ex) {
                FacesContext.getCurrentInstance().addMessage(null,
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao escrever o ficheiro " + file.getFileName(), null));
            }
            return nomeFicheiro + aux + ext;
        }
    }
}
